<?php
/**
 * スコア選択コントローラモジュール
 */
require_once __DIR__ . '/../Components.php';
require_once __DIR__ . '/ScoreSelectMapper.php';
require_once APPLICATION_PATH . '/models/HttpRequest/HttpRequestController.php';
require_once 'Smarty/Components/select.php';

/**
 * スコア選択コントローラクラス
 * @link https://www.evernote.com/view/a1b29a71-7609-4e04-bb63-e5aee4029aad?locale=ja#b=90ccea2f-37a9-463f-89cf-099ea98d1d1f&n=a1b29a71-7609-4e04-bb63-e5aee4029aad
 */
class Components_ScoreSelect_Controller extends Smarty_Components_Select
{
	/** 得点コントローラ種別：前半得点 */
	const KIND_FIRST_HALF_POINT = "KFHP";
	/** 得点コントローラ種別：前半失点 */
	const KIND_FIRST_HALF_LOST = "KFHL";
	/** 得点コントローラ種別：後半得点 */
	const KIND_SECOND_HALF_POINT = "KSHP";
	/** 得点コントローラ種別：後半失点 */
	const KIND_SECOND_HALF_LOST = "KSHL";

	/** 得点データマッパ */
	protected $_objScoreMapper;
	/** ゲームＩＤ */
	protected $_GameID;

	/**
	 * コンストラクタ
	 * @param $sCompileId 中間ファイルＩＤ
	 */
	public function __construct($GameID, $sCompileId)
	{
		$this->_GameID = $GameID;
		$this->_objScoreMapper = new Components_ScoreSelect_Mapper($GameID);
		$aryOptions = $this->_createOptions();
		parent::__construct(COMPILE_DIR, $sCompileId, 'dummy', $aryOptions);
	}

	/**
	 * FETCH(non-PHPdoc)
	 * @see Smarty_Components_Select::fetch()
	 */
	public function fetch($ScoreKind)
	{
		$iSelectScoreNumber = 0;
		$sControllName = HttpRequest::FIRST_HALF_POINT;
		/**
		 * 得点種別による
		 * ・選択状態設定
		 * ・コントロールネーム設定
		 */
		switch ($ScoreKind)
		{
			case self::KIND_FIRST_HALF_POINT:
				$iSelectScoreNumber = $this->_objScoreMapper->getFirstHalfPoint();
				$this->_setProperty($iSelectScoreNumber, HttpRequest::FIRST_HALF_POINT);
				break;
			case self::KIND_FIRST_HALF_LOST:
				$iSelectScoreNumber = $this->_objScoreMapper->getFirstHalfLost();
				$this->_setProperty($iSelectScoreNumber, HttpRequest::FIRST_HALF_LOST);
				break;
			case self::KIND_SECOND_HALF_POINT:
				$iSelectScoreNumber = $this->_objScoreMapper->getSecondHalfPoint();
				$this->_setProperty($iSelectScoreNumber, HttpRequest::SECOND_HALF_POINT);
				break;
			case self::KIND_SECOND_HALF_LOST:
				$iSelectScoreNumber = $this->_objScoreMapper->getSecondHalfLost();
				$this->_setProperty($iSelectScoreNumber, HttpRequest::SECOND_HALF_LOST);
				break;
		}
		$sHtml = parent::fetch();
		return $sHtml;
	}

	/**
	 * コントローラプロパティを設定する
	 * @param $SelectedValue
	 * @param $ControllerName
	 */
	protected function _setProperty($SelectedValue, $ControllerName)
	{
		$this->_sSelected = $SelectedValue;
		/*** 選択状態はＨＴＴＰリクエストを優先する */
		if ( !empty($_REQUEST[$ControllerName]) ) {
			$this->_sSelected = $_REQUEST[$ControllerName];
		}
		$this->_sName = $ControllerName;
	}

	/**
	 * スコア得点メニューオプション配列作成
	 */
	protected function _createOptions()
	{
		$aryResult
		= array(
				0=>0,
				1=>1,
				2=>2,
				3=>3,
				4=>4,
				5=>5,
				6=>6,
				7=>7,
				8=>8,
				9=>9,
				10=>10,
				11=>11,
				12=>12,
				13=>13,
				14=>14,
				15=>15,
				16=>16,
				17=>17,
				18=>18,
				19=>19,
				20=>20,
				);
		return $aryResult;
	}
}